/*
 *  float3.cpp
 *  GLRenderer
 *
 *  Created by Tim Uusitalo on 9/20/10.
 *  Copyright 2010 __MyCompanyName__. All rights reserved.
 *
 */

#include "float3.h"

namespace devii
{

float3::float3()
{
}
	
float3::~float3()
{
}
	
	float3::float3(const float & x, const float & y, const float & z)
	{
		this->x = x;
		this->y = y;
		this->z = z;
	}

	float3 & float3::operator =(const float3 &vec)
	{
		x = vec.x;
		y = vec.y;
		z = vec.z;
		return *this;
	}
	
	float3 & float3::operator +=(const float3 &vec)
	{
		x += vec.x;
		y += vec.y;
		z += vec.z;
		
		return *this;
	}
	
	float3 & float3::operator +=(const float &f)
	{
		x += f;
		y += f;
		z += f;
		
		return *this;
	}
	
	float3 & float3::operator -=(const float3 &vec)
	{
		x -= vec.x;
		y -= vec.y;
		z -= vec.z;
		return *this;
	}
	
	float3 & float3::operator -=(const float &f)
	{
		x -= f;
		y -= f;
		z -= f;
		return *this;
	}
	
	float3 & float3::operator *=(const float3 &vec)
	{
		x *= vec.x;
		y *= vec.y;
		z *= vec.z;
		
		return *this;
	}
	
	float3 & float3::operator *=(const float &f)
	{
		x *= f;
		y *= f;
		z *= f;
		
		return *this;
	}
	
	float3 & float3::operator /=(const float3 &vec)
	{
		x /= vec.x;
		y /= vec.y;
		z /= vec.z;
		return *this;
	}
	
	float3 & float3::operator /=(const float &f)
	{
		x /= f;
		y /= f;
		z /= f;
		return *this;
	}
	
	float3 float3::operator +(const float3 &vec) const
	{
		return float3( x + vec.x, y + vec.y, z + vec.z );
	}
	
	float3 float3::operator +(const float &f) const
	{
		return float3( x + f, y + f, z + f );
	}
	
	float3 float3::operator -(const float3 &vec) const
	{
		return float3( x - vec.x, y - vec.y, z - vec.z );
	}
	
	float3 float3::operator -(const float &f) const
	{
		return float3( x - f, y - f, z - f );
	}
	
	float3 float3::operator *(const float3 & vec ) const
	{
		return float3( x * vec.x, y * vec.y, z * vec.z );
	}
	
	float3 float3::operator *(const float &f) const
	{
		return float3( x * f, y * f, z * f );
	}
	
	float3 float3::operator /(const float3 &vec) const
	{
		return float3( x / vec.x, y / vec.y, z / vec.z );
	}
	
	float3 float3::operator /(const float & f) const
	{
		return float3( x / f, y / f, z / f );
	}
}